perm filename NPROM.FAI[CMS,LCS]3 blob
sn#347577 filedate 1978-04-09 generic text, type T, neo UTF8
00100 ; NEW MONITOR AND BOOTSTRAP PROM.
00200
00300 .INSERT ASMBL.FAI
00400 UNDEF←377
00500
00600 ; ZPAGE RAM
00700
00800 TFLG: 0
00900 VAL: 0
01000 ADR: 0
01100 0
01200
01300 BLOCK 15 ;OLD DDT RAM
01400
01500 CUR: 0
01600 0
01700 BRCODE: 0
01800 RSCODE: 0
01900 KBCODE: 0
00100 ;RESET
00200 LOC 177274 ;LOC 177000
00300 SRSTR←UNDEF ;System reset register
00400 RST: PHA ;Save A
00500 RSTREG←UNDEF ;POWER ON RESET REG
00600 PORBIT←UNDEF ;POWER ON RESET BIT
00700 LDA RSTREG ;CHECK FOR POWER ON RESET
00800 ANDI PORBIT
00900 BNE MANUAL ;NOT POWER ON
01000 DSKSEL←176437;Floppy select
01100
01200 JSR RSTAK ;Reset stack and decimal mode
01300
01400 ;Stack and decimal mode reset
01500 PDP←377 ;STACK DEPTH
01600 RSTAK: LDXI PDP ;Get stack depth.
01700 TXS
01800 CLD ;CLEAR DECIMAL MODE
01900 RTS
02000 ;Reset ram jumps.
02100 JMPSET:
02200
02300 ;Setup interrupt vectors.
02400 IVECT←176360 ;Ram interrupt vector table address.
02500 LDXI 17 ;Number of vectors * 2
02600 IVSET: LDAX IVDEF ;Default vector setup loop
02700 STAX IVECT
02800 DEX
02900 BPL IVSET
03000
03100 PRIC←176436 ;PRI CONTROL REGISTER ADDRESS
03200 LDAI UNDEF ;SETUP PRI CONTROL REGISTER
03300 STA PRIC
00100 ;Enable disk
00200 LDAI 20 ;20 = Head unloaded and
00300 STA DSKSEL ;disk init disabled.
00400
00500 FDSKC←176420 ;DISK COMMAND REGISTER
00600 FDSKT←176421 ;DISK TRACK REGISTER
00700 FDSKS←176422 ;DISK SECTOR REGISTER
00800 FDSKD←176423 ;DISK DATA REGISTER
00900 LDAI 163 ;Read 1 IBM sector (128 bytes)
01000 STA FDSKC ;from the first sector on the
01100 ;first track.
01200
01300 ;SETUP DMA
01400 FDMAA←176400 ;FDSK DMA ADDRESS REGISTER
01500 FDMAC←176401 ;FDSK COUNT REGISTER
01600 DMACON←176410;DMA COMMAND REGISTER
01700 LDAI 0 ;RESET DMA
01800 STA DMACON
01900 STA FDMAA ;SETUP DMA ADDRESS
02000 LDAI 2 ;1000
02100 STA FDMAA
02200 LDAI 377 ;SETUP DMA COUNT
02300 STA FDMAC
02400 LDAI 201 ;CNT=512-1
02500 STA FDMAC
02600 LDAI 141 ;ENABLE FDSK DMA
00100 ;START
00200 BOOTS←1000 ;BOOTSTRAP START ADDRESS
00300 DMAINT:
00400 DSKINT:
00500 JMP BOOTS ;JUMP TO BOOT START
00600
00700 ;Default interupt vectors.
00800 IVDEF: IVERR ;Error
00900 PROM
01000 IVERR ;Error
01100 PROM
01200 UNLOAD ;Disable head preload
01300 PROM
01400 MODINT ;TTY default
01500 PROM
01600 DMAINT ;Disk load and boot
01700 PROM
01800 DSKINT ;Disk load and boot
01900 PROM
02000 IVERR ;Error
02100
00100 ;MANUAL RESET
00200 MANUAL: LDAI 20 ;Unload disk head.
00300 STA DSKSEL
00400 JSR RCDPY ;Reset chr dpy
00500 JSR RMOD ;Reset BRATE, ACIA, and modem.
00600
00700 ;Reset chr dpy
00800 RCDPY: LDAI 0 ;Reset cursor
00900 STAZ CUR
01000 LDAI DPYRAM
01100 STAZ CUR+1
01200
01300 RASTER←171760;RASTER OFFSET
01400 LDAI 14 ;SET UP DPY DEFAULTS
01500 STA RASTER ;SHOULD BE 0,0
01600 CHRROW←171761;CHR ROW OFFSET
01700 LDAI 377
01800 STA CHRROW
01900 DPYC←171764 ;VIDIO CONTROL
02000 LDAI 100 ;CURSOR ENABLE
02100 STA DPYC
02200 VMIX←171765 ;VIDIO MIXER
02300 LDAI 1 ;NORMAL MIX
02400 STA VMIX
02500 RTS
02600
02700 ;RESET BRATE AND ACIA DEFAULTS
02800 RSDEF←25 ;ACIA CONTROL DEFAULT
02900 RMOD: LDAI 15 ;Set bit rate to 300
03000 STAZ BRCODE
03100 LDAI RSDEF ;SETUP ACIA DEFAULT
03200 STAZ RSCODE
03300 RTS
03400
03500 ;RESET KEY BOARD DEFAULTS
03600 KBD←173370 ;KB DATA REGISTER
03700 KBC←173371 ;KB CONTROL REGISTER
03800 LDAI UNDEF ;RESET KB DEFAULT
03900 STAZ KBCODE
00100 ;DPY DDT LOOP
00200 PCR: LDAI 15 ;PRINT <cr>.
00300 JSR PCHR
00400 PLF: LDAI 12
00500 JSR PCHR ;PRINT <cr>
00600 GNEXT: JSR GCHR ;Wait for next chr
00700 ANDI 177
00800
00900 ECHO: JSR PCHR ;Echo it
01000
01100 JMP GNEXT ;Wait for next chr
01200
00100 ;PRINT ADDRESS/VAL
00200 PAV: LDXI 0
00300 LDAI 1 ;# OF DIGITS
00400 STAZ NDIG
00500 STAZ TFLG ;SET BIT MASK
00600 LDYI 2 ;# OF BITS + C
00700 JSR RLOOP ;PRINT "0" OR "1"
00800 LDAI 5
00900 STAZ NDIG
01000 LDAI 7
01100 STAZ TFLG
01200 JSR CLOOP ;PRINT 5 OCTAL DIGITS
01300 LDAI "/"
01400 JSR PCHR ;PRINT "/"
01500 LDAI 1
01600 STAZ NDIG
01700 LDYI 3
01800 STYZ TFLG
01900 JSR DLOOP ;PRINT "0" - "3"
02000 LDAI 2
02100 STAZ NDIG
02200 LDAI 7
02300 STAZ TFLG
02400 JSR CLOOP ;PRINT 2 OCTAL DIGITS
02500 RTS
02600
02700 CLOOP: LDYI 3 ;FOR 3 BITS PER DIGIT
02800 RLOOP: ROLZ VAL ;ROTATE ADDRESS AND VALUE
02900 ROLZ ADR
03000 ROLZ ADR+1
03100 DLOOP: DEY
03200 BNE RLOOP
03300 LDAZ VAL ;GET NEXT DIGIT
03400 ANDZ TFLG
03500 ORAI 60 ;CONVERT TO ASCII
03600 JSR PCHR ;PRINT IT
03700 DECZ NDIG
03800 BNE CLOOP ;NEXT DIGIT
03900 RTS
00100 ;PRINT CHR
00200 PCHR:
00300 STAIX CUR ;WRITE CHR INTO CHRDPY MEM
00400
00500 INCZ CUR ;INCREMENT CURSOR
00600 LDAZ CUR
00700 ANDI 77 ;CHECK IF OFF RIGHT EDGE
00800 BEQ CRLF ;CLEAR NEXT LINE
00900
01000 CURREG←171762 ;CURSOR CONTROL REGISTERS
01100 LDAZ CUR ;UPDATE CURSOR
01200 STA CURREG
01300 LDAZ CUR+1
01400 STA CURREG+1
01500 RTS
01600
01700 CRLF: DECZ CUR ;FIX CURSOR
01800 LDAZ CUR
01900 ANDI 300 ;<CR>
02000 STAZ CUR
02100 JMP LF ;<LF>
02200
02300 ;LINE FEED
02400 LF: CLC
02500 LDAZ CUR
02600 ADCI 100 ;NEXT LINE
02700 STAZ CUR
02800 BCC NOTOFF
02900 INCZ CUR+1
03000 LDAZ CUR+1
03100 CMPI ED ;BOTTOM OF SCREEN
03200 BEQ GLITCH
03300
03400 CTEOL: TYA ;SAVE Y
03500 PHA
03600 LDAZ CUR
03700 ANDI 77
03800 EORI 77
03900 TAY
04000 LDAI 40 ;<space>
04100 CLR: STAIY CUR
04200 DEY
04300 BNE CLR
00100 ;Paper tape loader
00200 PTLOAD:
00300
00100 ;Prom reset and interupt vectors
00200 LOC 200266 ;LOC 177772
00300
00400 NMIV: NMIINT ;Prom Non maskable interupt vector
00500 PROM
00600
00700 RSTV: RST ;Prom reset vector
00800 PROM
00900
01000 IRQINT←0 ;0 For vector enable
01100 IRQV: IRQINT ;Prom interupt request vector
01200 IRQINT
01300 END